package com.library.controller;

import com.library.entity.Staff;
import com.library.service.StaffService;
import com.library.util.ResultUtil;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * 员工管理控制器
 * 处理员工相关的HTTP请求
 */
@RestController
@RequestMapping("/api/staff")
public class StaffController {

    @Resource
    private StaffService staffService;

    /**
     * 新增员工
     * @param staff 员工信息
     * @return 操作结果
     */
    @PostMapping
    public ResultUtil<?> addStaff(@RequestBody Staff staff) {
        boolean success = staffService.addStaff(staff);
        return success ? ResultUtil.success("员工新增成功") : ResultUtil.error("员工编号已存在");
    }

    /**
     * 更新员工信息
     * @param id 员工ID
     * @param staff 员工信息
     * @return 操作结果
     */
    @PutMapping("/{id}")
    public ResultUtil<?> updateStaff(@PathVariable Long id, @RequestBody Staff staff) {
        staff.setId(id);
        boolean success = staffService.updateStaff(staff);
        return success ? ResultUtil.success("员工信息更新成功") : ResultUtil.error("员工不存在或编号重复");
    }

    /**
     * 删除员工
     * @param id 员工ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    public ResultUtil<?> deleteStaff(@PathVariable Long id) {
        boolean success = staffService.deleteStaff(id);
        return success ? ResultUtil.success("员工删除成功") : ResultUtil.error("员工不存在");
    }

    /**
     * 根据ID查询员工
     * @param id 员工ID
     * @return 员工信息
     */
    @GetMapping("/{id}")
    public ResultUtil<Staff> getStaffById(@PathVariable Long id) {
        Staff staff = staffService.getStaffById(id);
        return staff != null ? ResultUtil.success(staff) : (ResultUtil<Staff>) ResultUtil.error("员工不存在");
    }

    /**
     * 按条件搜索员工
     * @param condition 搜索条件（姓名、编号等）
     * @return 员工列表
     */
    @GetMapping("/search")
    public ResultUtil<List<Staff>> searchStaff(@RequestParam Map<String, Object> condition) {
        List<Staff> staffList = staffService.getStaffByCondition(condition);
        return ResultUtil.success(staffList);
    }

    /**
     * 查询所有员工
     * @return 员工列表
     */
    @GetMapping
    public ResultUtil<List<Staff>> getAllStaff() {
        List<Staff> staffList = staffService.getAllStaff();
        return ResultUtil.success(staffList);
    }
}
